package com.test;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.Set;

public class MySelenium {

//    public void t1() throws InterruptedException {
//        WebDriverManager.chromedriver().setup();
//        ChromeOptions options = new ChromeOptions();
//        options.addArguments("--remote-allow-origins=*") ;
//
//        WebDriver driver = new ChromeDriver(options);
//
//        driver.get("https://www.baidu.com");
//        Thread.sleep(2000);
//
//        driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("自动化测试");
//
//        Thread.sleep(2000);
//
//        driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
//
//        Thread.sleep(2000);
//        driver.quit();
//
//    }
//
//


WebDriver driver ;

   public void create(){

       WebDriverManager.chromedriver().setup();
        // 打开谷歌浏览器
       ChromeOptions options = new ChromeOptions();
       // 允许任何链接访问
       options.addArguments("--remote-allow-origins=*") ;

       // 默认情况: 等全部元素 和 图片等资源 加载完
//       options.setPageLoadStrategy(PageLoadStrategy.NORMAL) ;

       //不用等元素加载完
//       options.setPageLoadStrategy(PageLoadStrategy.NONE) ;

       // 只需要等 页面Dom元素加载完 , 图片等资源不需要
       options.setPageLoadStrategy(PageLoadStrategy.EAGER) ;


       // 打开浏览器
        this.driver = new ChromeDriver(options);
        // 访问百度
       driver.get("https://www.baidu.com");

   }

    void t1() throws InterruptedException {
      create();
        String text = driver.getCurrentUrl() ;
        System.out.println("获取到的内容: "+text);
        Thread.sleep(2000);
      driver.quit();
    }

    void t2() throws InterruptedException {
       create();

       // 点击后,就打开了新的页面
       driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a")).click();
        Thread.sleep(2000);

        //获取 所有句柄
        Set<String> windowHandles = driver.getWindowHandles();
        for(String win : windowHandles){
            // 如果当前driver手上的句柄 和 这个句柄不一样, 就切换
            if(!driver.getWindowHandle().equals(win)){
                driver.switchTo().window(win);
            }
        }

        // 输出标签页标题和 url
        System.out.println(driver.getTitle());
        System.out.println(driver.getCurrentUrl());
        Thread.sleep(3000);

        driver.close();
        Thread.sleep(3000);
        driver.close();

        driver.quit();
    }
    void t3() throws InterruptedException {
       create();

       // 将浏览器窗口最小化
        driver.manage().window().minimize() ;
        Thread.sleep(2000);
        // 窗口最大化
        driver.manage().window().maximize();
        Thread.sleep(2000);

        // 窗口全屏
        driver.manage().window().fullscreen();
        Thread.sleep(2000);

        // 设置窗口大小
        driver.manage().window().setSize(new Dimension(500 , 600));
        Thread.sleep(2000);



       driver.quit();
    }
    void  t4() throws InterruptedException, IOException {
        create();
        getTakeScreenShot(getClass().getName());   // 通过反射,获取当前测试类的名字
        Thread.sleep(2000);
         driver.quit();
    }

    void getTakeScreenShot(String str) throws IOException {
        // 获取截图
        File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        // 创建出截图文件

        // 年月日 格式
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd") ;
        // 时分秒毫秒 格式
        SimpleDateFormat s2 = new SimpleDateFormat("HHmmssSS") ;

        // 通过当前时间来获取 时间 , 并且按上面的 格式来
        // 日期: 年月日 , 用来分目录
        String dirTime = s1.format(System.currentTimeMillis()) ;
        // 截图文件名称, 时分秒毫秒,
        String fileTime = s2.format(System.currentTimeMillis()) ;

        // 最后文件存放在 src/image/yyyy-MM-dd/ 方法名 + HHmmssSS .png 文件

        String fileName = "src/image/" + dirTime +"/" + str + fileTime +".png";
        FileUtils.copyFile(file , new File(fileName));
    }

    void t5() throws InterruptedException {
       create();
       // 隐式等待 毫秒
       driver.manage().timeouts().implicitlyWait(Duration.ofMillis(2000)) ;
       //隐式等待  秒
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2)) ;
        //

        driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).click();
        //获取 所有句柄
        Set<String> windowHandles = driver.getWindowHandles();
        for(String win : windowHandles){
            // 如果当前driver手上的句柄 和 这个句柄不一样, 就切换
            if(!driver.getWindowHandle().equals(win)){
                driver.switchTo().window(win);
            }
        }
        driver.quit();


    }

   void t6(){
       create();
       System.out.println(new SimpleDateFormat("HH:mm:ss").format(System.currentTimeMillis()));
       driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(4)) ;
       driver.findElement(By.cssSelector("#su"));

       WebDriverWait wait = (WebDriverWait) new WebDriverWait(driver , Duration.ofSeconds(10));
       wait.until(ExpectedConditions.
              presenceOfElementLocated(By.cssSelector("#su")));
       System.out.println(new SimpleDateFormat("HH:mm:ss").format(System.currentTimeMillis()));

       driver.quit();
   }
   void t7() throws InterruptedException {
       create();

       // 后退
       driver.navigate().back();
       Thread.sleep(2000);

       // 前进
       driver.navigate().forward();
       Thread.sleep(2000);

       // 刷新
       driver.navigate().refresh();


       Thread.sleep(2000);
       driver.quit();
   }
   void t8(){
       create();
       // 获取页面的弹窗
       Alert alert = driver.switchTo().alert() ;

       // 确认
       alert.accept();

       // 取消
       alert.dismiss();

       // 文件上传
       // 先查找到 文件上传的 元素

       driver.quit();

   }


}
